/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Competencia;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class CompetenciaPeer {

	private static final String BUSCAR_COMPETENCIAS =
		"SELECT id_competencia, descripcion, ponderacion FROM competencia ";

	private static final String BUSCAR_COMPETENCIA  =	
		"SELECT id_competencia, descripcion, ponderacion FROM competencia "+
		"WHERE id_competencia = &id_competencia";

	private static final String INSERTAR_COMPETENCIA  =
		"INSERT INTO competencia(descripcion , ponderacion ) VALUES "+
		"('&descripcion', &ponderacion)";

	private static final String ACTUALIZAR_COMPETENCIA =
		"UPDATE competencia "+
		"SET descripcion = '&descripcion', ponderacion = &ponderacion "+
		"WHERE id_competencia = &id_competencia";

	private static final String ELIMINAR_COMPETENCIA =
		"DELETE FROM competencia "+
		"WHERE id_competencia = &id_competencia";

	
		
	/** busca en la base de datos todos los registros de la tabla "competencia"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de competencias
	* @see         				Competencia, Statement
	*/
	public static ArrayList<Competencia> buscarCompetencias(Statement stmt) {
		ArrayList<Competencia> competencias = new ArrayList<Competencia>();

		String sql = BUSCAR_COMPETENCIAS; //"SELECT id_competencia, descripcion, ponderacion FROM competencia ";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Competencia comp = new Competencia();

					comp.setIdCompetencia(rs.getInt("id_competencia"));
					comp.setDescripcion(rs.getString("descripcion"));
					comp.setPonderacion(rs.getFloat("ponderacion"));
					
					
					competencias.add(comp);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return competencias;
	}
	
	/** busca en la base de datos un registro de la tabla "competencia"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idCompetencia		    id de la competencia que se desea cosultar
	* 
	* @return					competencia buscada
	* @see         				Competencia, Statement
	*/
	public static Competencia buscarCompetencia(Statement stmt, int idCompetencia) {
		Competencia competencia = new Competencia();

		String sql = BUSCAR_COMPETENCIA;
		//"SELECT id_competencia, descripcion, ponderacion FROM competencia "+
		//"WHERE id_competencia = &id_competencia";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_competencia", String.valueOf(idCompetencia));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					competencia.setIdCompetencia(rs.getInt("id_competencia"));
					competencia.setDescripcion(rs.getString("descripcion"));
					competencia.setPonderacion(rs.getFloat("ponderacion"));				
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return competencia;
	}
	
	/** Inserta una Competencia en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param competencia		competencia que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarCompetencia(Statement stmt, Competencia competencia) throws SQLException {
		int idNuevaCompetencia = -1;
		ResultSet rs = null;
		
		
		try {
			String sql = INSERTAR_COMPETENCIA;
		// se setean los "parametros": &id_cargo, '&cargo', '&fecha_ini', '&fecha_egr', &id_nivel, &id_dependencia, &funcionario

			sql = sql.replaceAll("&descripcion", competencia.getDescripcion())
			 		 .replaceAll("&ponderacion", "" + competencia.getPonderacion());

		stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
		
		rs = stmt.getGeneratedKeys();
		if (rs.next()) {
			idNuevaCompetencia = rs.getInt("id_competencia");
			Util.print("nuevo registro: " + idNuevaCompetencia);
		}
	} finally {
		rs.close();
	}

	return idNuevaCompetencia;
	}
		 

	/** Actualiza una competencia en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param competencia			competencia que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarCompetencia(Statement stmt, Competencia competencia) throws SQLException {
		String sql = ACTUALIZAR_COMPETENCIA;
		 //se setean los "parametros": &id_competencia, &descripcion, &ponderacion
		sql = sql.replaceAll("&id_competencia", "" + competencia.getIdCompetencia())
				 .replaceAll("&descripcion", competencia.getDescripcion())
				 .replaceAll("&ponderacion", "" + competencia.getPonderacion());
		stmt.executeUpdate(sql);
	}
	
	/**
	 *  Elimina una competencia en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param Competencia		competencia que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarCompetencia(Statement stmt, Competencia competencia) throws SQLException {
		String sql = ELIMINAR_COMPETENCIA;
		// se setean los "id_competencia = &id_competencia";
		sql = sql.replaceAll("&id_competencia", "" + competencia.getIdCompetencia());

		stmt.executeUpdate(sql);
	}
	
}
